﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;


namespace Sispe.Mvc4.Controllers
{
    public class DerechoHabienteController : Controller
    {
        [Dependency]
        public IDerechoHabienteBL derechoBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabBL { get; set; }

        [Dependency]
        public IVinculoFamiliarBL vinculoFamiliar { get; set; }

        [Dependency]
        public IDocumentoSustentaBL documentoSustentaBL { get; set; }

        [Dependency]
        public IPersonaBL personaBL { get; set; }

        public ActionResult Index(int id = 0)
        {
            if (id == 0)
            {
                return RedirectToAction("Index", "Trabajador");
            }
            else
            {
                var derechoHabientes = derechoBL.GetFromDerechoHabienteByIdTrabajador(id);

                var trabajador = trabBL.GetFromTrabajadorById(id);

                if (trabajador == null)
                {
                    return RedirectToAction("Index", "Trabajador");
                }

                ViewData["IdTrabajador"] = trabajador.Id;
                ViewData["TRABAJADOR"] = trabajador.PERSONA.NombreCompleto;

                return View(derechoHabientes);
            }
        }

        public ActionResult Search(string nombrePersona)
        {
            var result = personaBL.GetAllFromPersona()
                .Where(r => r.NombreCompleto.ToUpper().StartsWith(nombrePersona.ToUpper())
                    || r.NombreCompleto.ToUpper().Contains(nombrePersona.ToUpper()))
                .Take(10)
                .Select(r => new { id = r.IdPersona, label = r.NombreCompleto, name = "Id_Persona" });

            return Json(result, JsonRequestBehavior.AllowGet);

        }

        public ActionResult Create(int id = 0)
        {
            var vinculoFam = vinculoFamiliar.GetAllFromVinculoFamiliar();
            ViewData["IdVinculoFamiliar"] = new SelectList(vinculoFam, "IdVinculoFamiliar", "Descripcion");

            var docSustenta = documentoSustentaBL.GetAllFromDocumentoSustenta();
            ViewData["IdDocumentoSustenta"] = new SelectList(docSustenta, "IdDocumentoSustenta", "Descripcion");

            

            ViewData["IdTrabajador"] = id;

            var _persona = personaBL.GetFromPersonaById(id);
            ViewData["TRABAJADOR"] = _persona.NombreCompleto;

            return View();
        }

        [HttpPost]
        public ActionResult Create(FormCollection colection, DERECHO_HABIENTE derhab)
        {
            try
            {
                DERECHO_HABIENTE derechoHabiente = new DERECHO_HABIENTE()
                {
                    Activo = derhab.Activo,
                    ConstanciaFisica = derhab.ConstanciaFisica,
                    IdDerechoHabiente = derhab.IdDerechoHabiente,
                    IdVinculoFamiliar = Int32.Parse(colection["IdVinculoFamiliar"].ToString()),
                    IdDocumentoSustenta = Int32.Parse(colection["IdDocumentoSustenta"].ToString()),
                    IdPersona = Int32.Parse(colection["Id_Persona"].ToString()),
                    IdTrabajador = Int32.Parse(colection["IdTrabajador"].ToString()),
                };

                derechoBL.RegistrarDerechoHabiente(derechoHabiente);
                return RedirectToAction("Index", "DerechoHabiente", new { @id = derechoHabiente.IdDerechoHabiente });
            }
            catch (Exception ex)
            {
                TempData["AlertMessage"] = ex.Message;
                return RedirectToAction("Create");
            }
        }


        public ActionResult Edit(int id = 0)
        {

            if (id == 0)
            {
                return View();
            }

            var currDerHab = new DERECHO_HABIENTE();

            var derechoHabiente = (from c in derechoBL.GetAllFromDerechoHabientes()
                             where c.IdDerechoHabiente.Equals(id)
                             select c).ToList();

            foreach (var item in derechoHabiente.Where(c => c.IdDerechoHabiente.Equals(id)))
            {
                currDerHab.Activo = item.Activo;
                currDerHab.ConstanciaFisica = item.ConstanciaFisica;
                currDerHab.IdDerechoHabiente = item.IdDerechoHabiente;
                
                currDerHab.IdDocumentoSustenta = item.IdDocumentoSustenta;
                currDerHab.IdPersona = item.IdPersona;
                currDerHab.IdTrabajador = item.IdTrabajador;
                currDerHab.IdVinculoFamiliar = item.IdVinculoFamiliar;
            }
            
            var vinculoFam = vinculoFamiliar.GetAllFromVinculoFamiliar();
            ViewData["IdVinculoFamiliar"] = new SelectList(vinculoFam, "IdVinculoFamiliar", "Descripcion", currDerHab.IdVinculoFamiliar);

            var docSustenta = documentoSustentaBL.GetAllFromDocumentoSustenta();
            ViewData["IdDocumentoSustenta"] = new SelectList(docSustenta, "IdDocumentoSustenta", "Descripcion", currDerHab.IdDocumentoSustenta);


            ViewData["Id_Persona"] = currDerHab.IdPersona;
            ViewData["IdTrabajador"] = currDerHab.IdTrabajador;
            ViewData["IdDerechoHabiente"] = currDerHab.IdDerechoHabiente;
            
            var _trabajador = personaBL.GetFromPersonaById(currDerHab.IdTrabajador);
            ViewData["TRABAJADOR"] = _trabajador.NombreCompleto;

            var _derHabient = personaBL.GetFromPersonaById(currDerHab.IdPersona);
            ViewData["PersonaSeleccionada"] = _derHabient.NombreCompleto;
            
            if (currDerHab == null)
            {
                return RedirectToAction("Index", "Trabajador");
            }

            return View(currDerHab);
        }


        [HttpPost]
        public ActionResult Edit(int id, FormCollection colection, DERECHO_HABIENTE derhab)
        {
            try
            {
                DERECHO_HABIENTE derechoHabiente = new DERECHO_HABIENTE()
                {
                    Activo = derhab.Activo,
                    ConstanciaFisica = derhab.ConstanciaFisica,
                    IdDerechoHabiente = derhab.IdDerechoHabiente,
                    IdVinculoFamiliar = Int32.Parse(colection["IdVinculoFamiliar"].ToString()),
                    IdDocumentoSustenta = Int32.Parse(colection["IdDocumentoSustenta"].ToString()),
                    IdPersona = Int32.Parse(colection["Id_Persona"].ToString()),
                    IdTrabajador = Int32.Parse(colection["IdTrabajador"].ToString()),
                };

                derechoBL.ModificarDerechoHabiente(derechoHabiente);
                return RedirectToAction("Index", "DerechoHabiente", new { @id = derechoHabiente.IdDerechoHabiente });
            }
            catch (Exception ex)
            {
                TempData["AlertMessage"] = ex.Message;
                return View();
            }
        }


    }
}
